home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Memphis Amiga Group / MAG Disk (1989-11)(Memphis Amiga Group).zip / MAG Disk (1989-11)(Memphis Amiga Group).adf / HeadClean / disk_tools < prev    next >
Text File  |  1986-11-06  |  3KB  |  116 lines

  1. \ Tools for use with the Amiga TrackDisk driver.
  2. \ These were written to support a head cleaning program.
  3. \
  4. \ Author: Phil Burk
  5. \
  6. \ This file is hereby placed in the Public Domain and may be
  7. \ freely distributed.
  8.  
  9.  
  10. getmodule includes
  11. include? TD_MOTOR ji:devices/trackdisk.j
  12. include? td.format disk_support
  13.  
  14. ANEW TASK-DISK_TOOLS
  15.  
  16. variable DISKPORT
  17. variable DISKREQ
  18. variable DISKBUFFER
  19.  
  20. : TDT.CHANGE ( -- #changes , #times a disk has been put in or out )
  21.     diskreq @ td.changenum
  22. ;
  23.  
  24. : TDT.DELETE ( -- , delete port and requestor when done )
  25.     diskport @ diskreq @ td.delete
  26.     diskport off diskreq off
  27. ;
  28.  
  29. : TDT.TERM ( -- , clean up )
  30.     diskport @
  31.     IF  diskreq @
  32.         closedevice()
  33.         tdt.delete
  34.     ELSE ." TD.TERM - Not INITed!" cr
  35.     THEN
  36.     diskbuffer @ ?dup
  37.     IF freeblock  diskbuffer off
  38.     THEN
  39. ;
  40.  
  41. variable td-ok?
  42.  
  43. : TDT.INIT ( unit# -- ok? , open device and port for unit given )
  44.     false td-ok? !
  45.     td.create ?dup
  46.     IF dup diskreq !
  47.        swap diskport ! ( -- unit# diskreq )
  48.        td.open ?dup 
  49.        IF   ." Error on Open in TDT.INIT = " .hex cr
  50.            tdt.delete
  51.        ELSE MEMF_CHIP MEMF_CLEAR | NUMSECS TD_SECTOR * allocblock ?dup
  52.            IF  diskbuffer !
  53.                tdt.change drop
  54.                td-ok? on
  55.            THEN
  56.        THEN
  57.     ELSE ." TDT.INIT - Couldn't create ports!" cr
  58.     THEN
  59.     td-ok? @
  60. ;
  61.  
  62. : TDT.FILL ( byte -- , fill disk buffer with byte )
  63.     diskbuffer @
  64.     NUMSECS TD_SECTOR *
  65.     rot fill
  66. ;
  67.  
  68. : TDT.OFF ( --  , turn off motor )
  69.     0 diskreq @ td.motor drop
  70. ;
  71.  
  72. : TDT.UNFORMATTED? ( -- flag , true if UNformatted disk )
  73.     diskbuffer @ 1 0 diskreq @
  74.     td.read ?dup
  75.     tdt.off
  76.     IF dup 21 27 within?
  77.         IF drop true
  78.         ELSE ." !! TDT.UNFORMATTED - Error = " . cr false
  79.         THEN
  80.     ELSE false
  81.     THEN
  82. ;
  83.  
  84. : TDT.FORMAT.CYL  ( cyl -- , format both sides )
  85.     diskbuffer @ ?dup
  86.     IF  swap 2* 2dup diskreq @ td.format
  87.         1+ diskreq @ td.format
  88.     ELSE drop ." Allocate buffer first!" cr abort
  89.     THEN
  90. ;
  91.  
  92. : TDT.FORMAT.CYL.MANY ( start #cyl -- )
  93.     0
  94.     DO i over + tdt.format.cyl
  95.     LOOP drop
  96.     tdt.off
  97. ;
  98.  
  99. : TEST.MOTOR  ( -- , test turning motor on and off ) cr
  100.     255 diskreq @ td.motor ." State was " . cr
  101.     ." Hit key" cr key drop
  102.     0 diskreq @ td.motor ." State was " . cr
  103. ;
  104.  
  105. : DUMP.SHC ( sector head cyl -- , dump sector from disk )
  106.     td.hc>sector +
  107.     diskbuffer @ ?dup
  108.     IF  1 rot diskreq @
  109.         td.read?
  110.         tdt.off
  111.     ELSE ." Allocate buffer first!" cr abort
  112.     THEN
  113.     diskbuffer @ td_sector dump
  114. ;
  115.  
  116.